package com.ruoyi.performance.service.impl;

import com.google.common.base.Joiner;
import com.ruoyi.common.constant.Constants;
import com.ruoyi.common.utils.ServletUtils;
import com.ruoyi.performance.domain.PerfTemplateMitem;
import com.ruoyi.performance.domain.PerfTemplateMitemLink;
import com.ruoyi.performance.dto.PerfLevelTemplateDto;
import com.ruoyi.performance.dto.PerfTemplateMitemDto;
import com.ruoyi.performance.mapper.PerfTemplateMitemMapper;
import com.ruoyi.performance.service.PerfTemplateMitemService;

import lombok.extern.slf4j.Slf4j;

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport;

import javax.annotation.Resource;

import static com.ruoyi.performance.service.impl.PerfLevelScoreServiceImpl.INITIAL;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * @author YL
 * @date 2020/8/26 10:08
 * @description 绩效模板主项Service接口实现类
 */
@Service
@Slf4j
public class PerfTemplateMitemServiceImpl implements PerfTemplateMitemService {

    @Resource
    private PerfTemplateMitemMapper perfTemplateMitemMapper;

    /**
     * 查询绩效模板主项
     *
     * @param id 绩效模板主项ID
     * @return 绩效模板主项
     */
    @Override
    public PerfTemplateMitemDto selectPerfTemplateMitemById(int id) {
        return perfTemplateMitemMapper.selectPerfTemplateMitemById(id);
    }

    /**
     * 查询绩效模板主项列表
     *
     * @param perfTemplateMitemDto 绩效模板主项
     * @return 绩效模板主项集合
     */
    @Override
    public List<PerfTemplateMitemDto> selectPerfTemplateMitemList(PerfTemplateMitemDto perfTemplateMitemDto) {
        return perfTemplateMitemMapper.selectPerfTemplateMitemList(perfTemplateMitemDto);
    }

    /**
     * 新增绩效模板主项
     *
     * @param perfTemplateMitemDto 绩效模板主项
     * @return 结果
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public int insertPerfTemplateMitem(PerfTemplateMitemDto perfTemplateMitemDto) {
        //添加主项
        String username = ServletUtils.getRequest().getHeader(Constants.CURRENT_USERNAME);
        String now = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
        perfTemplateMitemDto.setCreateBy(username);
        perfTemplateMitemDto.setCreateTime(now);
        perfTemplateMitemMapper.insertPerfTemplateMiem(perfTemplateMitemDto);
        //添加主项与模板关联关系
        PerfTemplateMitemLink perfTemplateMitemLink=new PerfTemplateMitemLink();
        //获取自增生成的主项id（mybatis返回）
        int id = perfTemplateMitemDto.getId();
        perfTemplateMitemLink.setMitemId(perfTemplateMitemDto.getId());
        perfTemplateMitemLink.setTemplateId(perfTemplateMitemDto.getTemplateId());
        perfTemplateMitemMapper.insertPerfTemplateMitemLink(perfTemplateMitemLink);
        return id;
    }

    /**
     * 修改绩效模板主项
     *
     * @param perfTemplateMitem 绩效模板主项
     * @return 结果
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public String updatePerfTemplateMitem(Map<String, List<PerfTemplateMitem>> datas) {
    	//添加主项
		String result = "1";

    	for (PerfTemplateMitem perfTemplateMitem : datas.get("datas"))
    	{
        String username = ServletUtils.getRequest().getHeader(Constants.CURRENT_USERNAME);
        String now = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
        perfTemplateMitem.setUpdateBy(username);
        perfTemplateMitem.setUpdateTime(now);
        try {
			perfTemplateMitemMapper.updatePerfTemplateMiem(perfTemplateMitem);
		} catch (Exception e) {
			result = perfTemplateMitem.getMitemCode() + "绩效主项更改状态失败，请联系管理员！";
			log.error(result, e);
			TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
			return result;
		}
    }
    	return result;
    }

    /**
     * 删除绩效模板主项
     *
     * @param id 绩效模板主项ID
     * @return 结果
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public String deletePerfTemplateMitemById(String ids) {

        String result = "1";
		String[] tmpids = ids.split(",");
		for (String tmpid : tmpids) {
	        //获取该主项对应的模板ID
			int id = Integer.parseInt(tmpid); 
	        int templateId=perfTemplateMitemMapper.selectPerfTemplateMitemById(id).getTemplateId();
	        //删除模板与主项的对应关系
	        PerfTemplateMitemLink perfTemplateMitemLink=new PerfTemplateMitemLink();
	        perfTemplateMitemLink.setTemplateId(templateId);
	        perfTemplateMitemLink.setMitemId(id);
	        perfTemplateMitemMapper.deletePerfTemplateMitemLink(perfTemplateMitemLink);
	        //删除主项
	        perfTemplateMitemMapper.deletePerfTemplateMiemById(id);
		}
		return result;
    }
    
}
